using Unity.Mathematics;
namespace Geometry
{
    public class AxisTransforms
    {
        /**
       * @brief A matrix to convert from y-up to z-up orientation,
       * by rotating about PI/2 around the x-axis
       */
        public static double4x4 Y_UP_TO_Z_UP = new double4x4(
          new double4(1.0, 0.0, 0.0, 0.0),
          new double4(0.0, 0.0, 1.0, 0.0),
          new double4(0.0, -1.0, 0.0, 0.0),
          new double4(0.0, 0.0, 0.0, 1.0));

        /**
         * @brief A matrix to convert from z-up to y-up orientation,
         * by rotating about -PI/2 around the x-axis
         */
        public static double4x4 Z_UP_TO_Y_UP = new double4x4(
          new double4(1.0, 0.0, 0.0, 0.0),
          new double4(0.0, 0.0, -1.0, 0.0),
          new double4(0.0, 1.0, 0.0, 0.0),
          new double4(0.0, 0.0, 0.0, 1.0));

        /**
         * @brief A matrix to convert from x-up to z-up orientation,
         * by rotating about -PI/2 around the y-axis
         */
        public static double4x4 X_UP_TO_Z_UP = new double4x4(
          new double4(0.0, 0.0, 1.0, 0.0),
          new double4(0.0, 1.0, 0.0, 0.0),
          new double4(-1.0, 0.0, 0.0, 0.0),
          new double4(0.0, 0.0, 0.0, 1.0));

        /**
         * @brief A matrix to convert from z-up to x-up orientation,
         * by rotating about PI/2 around the y-axis
         */
        public static double4x4 Z_UP_TO_X_UP = new double4x4(
          new double4(0.0, 0.0, -1.0, 0.0),
          new double4(0.0, 1.0, 0.0, 0.0),
          new double4(1.0, 0.0, 0.0, 0.0),
          new double4(0.0, 0.0, 0.0, 1.0));


        /**
         * @brief A matrix to convert from x-up to y-up orientation,
         * by rotating about PI/2 around the z-axis
         */
        public static double4x4 X_UP_TO_Y_UP = new double4x4(
          new double4(0.0, 1.0, 0.0, 0.0),
          new double4(-1.0, 0.0, 0.0, 0.0),
          new double4(0.0, 0.0, 1.0, 0.0),
          new double4(0.0, 0.0, 0.0, 1.0));

        /**
         * @brief A matrix to convert from y-up to x-up orientation,
         * by rotating about -PI/2 around the z-axis
         */
        public static double4x4 Y_UP_TO_X_UP = new double4x4(
          new double4(0.0, -1.0, 0.0, 0.0),
          new double4(1.0, 0.0, 0.0, 0.0),
          new double4(0.0, 0.0, 1.0, 0.0),
          new double4(0.0, 0.0, 0.0, 1.0));
    }
}